package com.example.controller;

import com.example.entity.Host;
import com.example.entity.ServiceApplication;
import com.example.entity.User;
import com.example.service.HostService;
import com.example.service.ServiceApplicationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.servlet.http.HttpSession;
import java.util.List;

// 声明该类为Spring MVC的控制器，处理与寄养家庭相关的请求
@Controller
// 定义该控制器处理的请求路径前缀为 /Hosts
@RequestMapping("/Hosts")
public class HostController {
    // 自动注入HostService实例，用于处理寄养家庭业务逻辑
    @Autowired
    private HostService hostService;
    // 自动注入ServiceApplicationService实例，用于处理服务申请业务逻辑
    @Autowired
    private ServiceApplicationService applicationService;

    @GetMapping("/list")
    public String hostList(Model model) {
        // 调用HostService的hostList方法获取所有寄养家庭列表
        List<Host> hostList = hostService.hostList();
        System.out.println("hostList" + hostList);
        model.addAttribute("hostList", hostList);
        return "/user/Host";
    }

    @GetMapping("/search")
    public String searchHosts(
            @RequestParam(required = false) String family_name,
            @RequestParam(required = false) String priceRange, // 修改为接收价格范围参数
            Model model) {

        Double minPrice = null;
        Double maxPrice = null;

        // 解析价格范围
        if (priceRange != null && !priceRange.isEmpty()) {
            switch (priceRange) {
                case "under50":
                    minPrice = 0.0;
                    maxPrice = 50.0;
                    break;
                case "50-100":
                    minPrice = 50.0;
                    maxPrice = 100.0;
                    break;
                case "over100":
                    minPrice = 100.0;
                    maxPrice = null; // 无上限
                    break;
                case "all":
                default:
                    // 不设置价格范围
                    break;
            }
        }

        // 调用HostService的searchHosts方法根据姓氏和价格范围搜索寄养家庭
        List<Host> searchResults = hostService.searchHosts(
                family_name, minPrice, maxPrice);

        // 将搜索结果添加到模型中，供视图使用
        model.addAttribute("hostList", searchResults);

        // 将选择的价格范围添加到模型中，用于回显选择的选项
        model.addAttribute("priceRange", priceRange);

        // 返回视图名称，跳转到显示寄养家庭列表的页面
        return "/user/Host";
    }

    @GetMapping("/publish")
    public String showPublishForm(Model model, HttpSession session) {
        // 从会话中获取当前登录的用户信息
        User user = (User) session.getAttribute("login_user");
        // 如果用户未登录，重定向到登录页面
        if (user == null) {
            return "redirect:/user/login";
        }

        // 检查用户是否已有审核通过的申请
        ServiceApplication application = applicationService.getLatestApprovedApplication(
                user.getUser_id(), "HOST");

        // 如果用户没有审核通过的申请，在模型中添加需要审核的标识
        if (application == null || !"APPROVED".equals(application.getStatus())) {
            model.addAttribute("needsApproval", true);
        }

        // 在模型中添加一个新的Host对象，用于表单绑定
        model.addAttribute("host", new Host());
        return "/user/hostPublish";
    }
    @PostMapping("/publish")
    public String publishHostService(@ModelAttribute Host host,
                                     @RequestParam(value = "envImages", required = false) MultipartFile[] envImages,
                                     HttpSession session,
                                     RedirectAttributes redirectAttributes) {
        // 从会话中获取当前登录的用户信息
        User user = (User) session.getAttribute("login_user");
        // 如果用户未登录，重定向到登录页面
        if (user == null) {
            return "redirect:/user/login";
        }
        if (envImages != null && envImages.length > 0) {
            try {
                // 这里简化处理，实际项目中应该保存文件到服务器并存储路径
                StringBuilder envBuilder = new StringBuilder();
                for (MultipartFile image : envImages) {
                    if (!image.isEmpty()) {
                        // 实际项目中应该保存文件并获取存储路径
                        envBuilder.append(image.getOriginalFilename()).append(",");
                    }
                }
                // 设置寄养家庭的环境图片信息
                host.setEnv(envBuilder.toString());
            } catch (Exception e) {
                // 如果图片上传失败，添加错误消息并重定向到发布表单页面
                redirectAttributes.addFlashAttribute("error", "图片上传失败");
                return "redirect:/Hosts/publish";
            }
        }

        // 检查用户是否通过审核
        ServiceApplication application = applicationService.getLatestApprovedApplication(
                user.getUser_id(), "HOST");

        // 如果用户没有审核通过的申请，添加错误消息并重定向到服务申请提交页面
        if (application == null || !"APPROVED".equals(application.getStatus())) {
            redirectAttributes.addFlashAttribute("error", "请先提交并通过服务申请审核");
            return "redirect:/application/submit?type=HOST";
        }

        host.setUser_id(user.getUser_id());
        host.setApplication_id(application.getApplication_id());
        hostService.addHost(host);
        return "redirect:/Hosts/list";
    }
}